/**
 * 
 */
package sudoku.util;

/**
 * @author Romet
 * 
 */
public class Language {

  private volatile Config config;

  public Language(Config config) {
    this.config = config;
  }

  public String getAbout_message() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Hetke versioon " + this.config.getVersioon() + "\n\n" + " Uuenduste kohta saab infot\n"
          + " http://www.hot.ee/rometpiho/sudoku/eesti\n" + " Kasutajate foorum\n" + " http://makephpbb.com/phpbb/sudoku.html\n" + " \n"
          + " Programmi autor,\n" + " Romet Piho";
    } else if (config.getLanguage().equals("eng")) {
      message = " Current version " + this.config.getVersioon() + "\n\n" + " Information about updates and fixes\n"
          + " http://www.hot.ee/rometpiho/sudoku/english\n" + " Users forum\n" + " http://makephpbb.com/phpbb/sudoku.html\n" + " \n"
          + " Program author,\n" + " Romet Piho";
    }
    return message;
  }

  public String getButton_yes() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Jah";
    } else if (config.getLanguage().equals("eng")) {
      message = "Yes";
    }
    return message;
  }

  public String getButton_no() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ei";
    } else if (config.getLanguage().equals("eng")) {
      message = "No";
    }
    return message;
  }

  public String getButton_cancel() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Loobu";
    } else if (config.getLanguage().equals("eng")) {
      message = "Cancel";
    }
    return message;
  }

  public String getButton_save() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Salvesta";
    } else if (config.getLanguage().equals("eng")) {
      message = "Save";
    }
    return message;
  }

  public String getButton_open() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ava";
    } else if (config.getLanguage().equals("eng")) {
      message = "Open";
    }
    return message;
  }

  public String getChoice_titleC() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Abi nupu valik";
    } else if (config.getLanguage().equals("eng")) {
      message = "Help button choice";
    }
    return message;
  }

  public String getChoice_titleH() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Valik";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choice";
    }
    return message;
  }

  public String getComputerhelp() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Arvuti abi seaded";
    } else if (config.getLanguage().equals("eng")) {
      message = "Computer help Preferences";
    }
    return message;
  }

  public String getComputerhelpcomputer_choice() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Valiku aknas korduvate numbrite välistamine";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choice window existing numbers exclusion";
    }
    return message;
  }

  public String getComputerhelp_status() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Korduva numbri panemisel hoiatus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Warning when putting an excisting number";
    }
    return message;
  }

  public String getComputerhelp_help() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Arvuti võimaldab panna abinupud";
    } else if (config.getLanguage().equals("eng")) {
      message = "Computer can put helpbuttons";
    }
    return message;
  }

  public String getComputerhelp_hinter() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Arvuti antavad vihjed järgmiste käikude kohta";
    } else if (config.getLanguage().equals("eng")) {
      message = "Computer hints about next possible move";
    }
    return message;
  }

  public String getComputerhelp_solver() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Arvuti lahendab mängu";
    } else if (config.getLanguage().equals("eng")) {
      message = "Computer solves game";
    }
    return message;
  }

  public String getComputerhelp_nb1() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " NB! Arvuti mängu lahendamise kasutamise";
    } else if (config.getLanguage().equals("eng")) {
      message = " NB! When using computer solver";
    }
    return message;
  }

  public String getComputerhelp_nb2() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " korral ei lähe mäng ajaloo tabelisse.";
    } else if (config.getLanguage().equals("eng")) {
      message = " the game won't go to history table.";
    }
    return message;
  }

  public String getComputerhelp_choicehelpremover() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Pärast nupu panemist vastavate abinuppude automaatne eemaldamine";
    } else if (config.getLanguage().equals("eng")) {
      message = "Automatic corresponding helpbuttons removal after putting a button";
    }
    return message;
  }

  public String getConfig_nimi() {
    String message = "";
    if (config.getHetke_kasutaja() == -1) {
      if (config.getLanguage().equals("est")) {
        message = "Mängija";
      } else if (config.getLanguage().equals("eng")) {
        message = "User";
      }
    } else {
      message = config.getNimi();
    }
    config.setNimi(message);
    return message;
  }

  public String getController_genereeri() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Mängu genereeritakse... Palun oota.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Generating... Please wait.";
    }
    return message;
  }

  public String getController_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Teade";
    } else if (config.getLanguage().equals("eng")) {
      message = "Message";
    }
    return message;
  }

  public String getDLX_adderror() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Ei saa andmebaasi lisada!\n" + " Mäng ei ole unikaalne.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Can not add to database!\n" + " The game is not unique.";
    }
    return message;
  }

  public String getDLX_difficultyerror() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "                    Ei saa andmebaasi lisada!\n" + " Mäng on üliraske ja seega inimloogikaga praktiliselt lahendamatu.";
    } else if (config.getLanguage().equals("eng")) {
      message = "                   Can not add to database!\n" + " It is an extreme game and therefore practically unsolvable for humans.";
    }
    return message;
  }

  public String getDLX_doubleerror() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Ei saa andmebaasi lisada!\n" + " Mäng juba eksisteerib.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Can not add to database!\n" + " The game already exists.";
    }
    return message;
  }

  public String getDLX_solveerror(int lahendusi) {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Ei ole võimalik lahendada!\n" + " Mängul on " + (lahendusi > 100 ? "rohkem kui 100" : String.valueOf(lahendusi))
          + " erinevat lahendit.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Can not solve game!\n" + " The game has " + (lahendusi > 100 ? "over 100" : String.valueOf(lahendusi))
          + " different solutions.";
    }
    return message;
  }

  public String getDLX_starterror(int lahendusi) {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Mängul on " + (lahendusi > 100 ? "rohkem kui 100" : String.valueOf(lahendusi)) + " erinevat lahendit.\n"
          + " Kas soovid lahendamist alustada?";
    } else if (config.getLanguage().equals("eng")) {
      message = " The game has " + (lahendusi > 100 ? "over 100" : String.valueOf(lahendusi)) + " different solutions.\n"
          + " Do you want to start solving it?";
    }
    return message;
  }

  public String getConnectionError() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Ei saadud andmebaasiga ühendust!!! Palun proovi hiljem uuesti.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Could not connect to database!!! Please try again later.";
    }
    return message;
  }

  public String getError() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Ei saadud andmebaasiga ühendust!!! Kasutatakse lokaalset andmebaasi,\n" + " mis ei pruugi olla kõige uuem versioon.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Could not connect to database!!! Local database  is being used\n" + " but it might not be up to date.";
    }
    return message;
  }

  public String getFontSize_examples() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Näited:";
    } else if (config.getLanguage().equals("eng")) {
      message = "Examples:";
    }
    return message;
  }

  public String getFontSize_message() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " mängude teksti suurused";
    } else if (config.getLanguage().equals("eng")) {
      message = " games font sizes";
    }
    return message;
  }

  public String getGameChoice_name() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Sudoku ";
    } else if (config.getLanguage().equals("eng")) {
      message = "Sudoku ";
    }
    return message;
  }

  public String getGameChoice_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vali mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choose game";
    }
    return message;
  }

  public String getHelp_tabtitle(int i) {
    String message = "";
    if (i == 0) {
      if (config.getLanguage().equals("est")) {
        message = "Üldine";
      } else if (config.getLanguage().equals("eng")) {
        message = "Overall";
      }
    } else if (i == 1) {
      if (config.getLanguage().equals("est")) {
        message = "Naked hulgad";
      } else if (config.getLanguage().equals("eng")) {
        message = "Naked sets";
      }
    } else if (i == 2) {
      if (config.getLanguage().equals("est")) {
        message = "Hidden hulgad";
      } else if (config.getLanguage().equals("eng")) {
        message = "Hidden sets";
      }
    } else if (i == 3) {
      if (config.getLanguage().equals("est")) {
        message = "Locked Candidates";
      } else if (config.getLanguage().equals("eng")) {
        message = "Locked Candidates";
      }
    } else if (i == 4) {
      if (config.getLanguage().equals("est")) {
        message = "X-Wing";
      } else if (config.getLanguage().equals("eng")) {
        message = "X-Wing";
      }
    } else if (i == 5) {
      if (config.getLanguage().equals("est")) {
        message = "Swordfish/Jellyfish";
      } else if (config.getLanguage().equals("eng")) {
        message = "Swordfish/Jellyfish";
      }
    } else if (i == 6) {
      if (config.getLanguage().equals("est")) {
        message = "Colors";
      } else if (config.getLanguage().equals("eng")) {
        message = "Colors";
      }
    } else if (i == 7) {
      if (config.getLanguage().equals("est")) {
        message = "Multicolors";
      } else if (config.getLanguage().equals("eng")) {
        message = "Multicolors";
      }
    } else if (i == 8) {
      if (config.getLanguage().equals("est")) {
        message = "XY-Wing";
      } else if (config.getLanguage().equals("eng")) {
        message = "XY-Wing";
      }
    }
    return message;
  }

  public String getHelp_message(int i) {
    String message = "";
    if (i == 0) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Eesmärk:\n \n" + "        Täita ruudustik nii, et igas reas, veerus\n"
            + " ja väikses 3x3 ruudustikus on numbrid 1-9.\n" + "        Üheski reas, veerus ega väikeses 3x3\n"
            + " ruudustikus ei tohi korduda ükski number.\n \n" + " [b]Juhised:\n \n"
            + "        Numbri ruutu lisamiseks vajuta soovitaval\n" + " kastil ning tekkivast aknast vali sobiv number.\n"
            + "        Hoides all Ctrl nuppu ja vajutades kastile\n" + " on võimalik lisada ja eemaldada abistavaid numbreid.\n"
            + " Sama akna saab ka keskmise hiire nupuga.\n" + "        Juba olemasolevat abinumbrit saab kustu-\n"
            + " tada, pannes seda sama numbrit veel üks kord.\n" + "        Kõiki numbreid on võimalik sisestada ka \n"
            + " klaviatuurilt ja liikuda nooleklahvidega.\n \n" + " [image]seletused_est.png\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Goal:\n \n" + "        Fill in the grid so that in every row, column\n"
            + " and small 3x3 grid are numbers from 1 to 9.\n \n" + " [b]Instructions:\n \n"
            + "        To get a number in a box, you have to click\n" + " on the desired box and choose a number from the \n"
            + " opening window.\n" + "        Holding down Ctrl and clicking on a box will\n"
            + " enable putting or removing helpnumbers. The same can\n" + " be done by clicking the middle mouse button.\n"
            + "        Already excisting helpnumbers can be deleted\n" + " by putting that same number again.\n"
            + "        All numbers can also be put to boxes using\n" + " keyboard numbers and moving with arrowkeys.\n \n"
            + " [image]seletused_eng.png\n";
      }
    } else if (i == 1) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Naked single:\n \n" + " Any cells which has only one candidate can safely be assigned that value.\n \n"
            + " [image]naked_single.png\n \n" + " It is very important whenever a value is assigned to a cell, that this\n"
            + " value is also excluded as a candidate from all other blank cells sharing\n"
            + " the same row, column and box. (Programs like Sudoku will do this\n" + " laborious step automatically for you too.)\n \n"
            + " [b]Naked pair:\n \n" + " If two cells in a group contain an identical pair of candidates and only\n"
            + " those two candidates, then no other cells in that group could be those\n" + " values.\n"
            + " These 2 candidates can be excluded from other cells in the group.\n \n" + " [image]naked_pair.png\n \n"
            + " In the example above, the candidates 6 & 8 in columns six and seven\n"
            + " form a Naked Pair within the row. Therefore, since one of these cells\n"
            + " must be the 6 and the other must be the 8, candidates 6 & 8 can be\n"
            + " excluded from all other cells in the row (in this case just the\n" + " highlighted cell).\n \n"
            + " The same principle that applies to Naked Pairs applies to Naked Triples\n & Naked Quads.\n \n" + " [b]Naked triple:\n \n"
            + " A Naked Triple occurs when three cells in a group contain no candidates\n"
            + " other that the same three candidates. The cells which make up a Naked\n"
            + " Triple don't have to contain every candidate of the triple. If these\n"
            + " candidates are found in other cells in the group they can be excluded.\n \n" + " [image]naked_triple.png\n \n"
            + " In the example above, a Naked Triple is formed by the top left, bottom\n"
            + " left & bottom right cells of a box since they only contain the candidates\n"
            + " 1, 4 & 6. Therefore the candidates 1 & 4 in the highlighted cells can be\n" + " excluded safely.\n \n"
            + " [b]Naked quad:\n \n" + " A Naked Quad occurs when four cells in a group contain no candidates\n"
            + " other that the same four candidates.\n \n" + " [image]naked_quad.png\n \n"
            + " In the example above, the candidates 2, 5, 7 & 9 in the 3 left most cells\n"
            + " and bottom middle cell of a box form a Naked Quad. Therefore candidates\n"
            + " 5 & 7 that are in the highlighted cells can be excluded.\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Naked single:\n \n" + " Any cells which has only one candidate can safely be assigned that value.\n \n"
            + " [image]naked_single.png\n \n" + " It is very important whenever a value is assigned to a cell, that this\n"
            + " value is also excluded as a candidate from all other blank cells sharing\n"
            + " the same row, column and box. (Programs like Sudoku will do this\n" + " laborious step automatically for you too.)\n \n"
            + " [b]Naked pair:\n \n" + " If two cells in a group contain an identical pair of candidates and only\n"
            + " those two candidates, then no other cells in that group could be those\n" + " values.\n"
            + " These 2 candidates can be excluded from other cells in the group.\n \n" + " [image]naked_pair.png\n \n"
            + " In the example above, the candidates 6 & 8 in columns six and seven\n"
            + " form a Naked Pair within the row. Therefore, since one of these cells\n"
            + " must be the 6 and the other must be the 8, candidates 6 & 8 can be\n"
            + " excluded from all other cells in the row (in this case just the\n" + " highlighted cell).\n \n"
            + " The same principle that applies to Naked Pairs applies to Naked Triples\n & Naked Quads.\n \n" + " [b]Naked triple:\n \n"
            + " A Naked Triple occurs when three cells in a group contain no candidates\n"
            + " other that the same three candidates. The cells which make up a Naked\n"
            + " Triple don't have to contain every candidate of the triple. If these\n"
            + " candidates are found in other cells in the group they can be excluded.\n \n" + " [image]naked_triple.png\n \n"
            + " In the example above, a Naked Triple is formed by the top left, bottom\n"
            + " left & bottom right cells of a box since they only contain the candidates\n"
            + " 1, 4 & 6. Therefore the candidates 1 & 4 in the highlighted cells can be\n" + " excluded safely.\n \n"
            + " [b]Naked quad:\n \n" + " A Naked Quad occurs when four cells in a group contain no candidates\n"
            + " other that the same four candidates.\n \n" + " [image]naked_quad.png\n \n"
            + " In the example above, the candidates 2, 5, 7 & 9 in the 3 left most cells\n"
            + " and bottom middle cell of a box form a Naked Quad. Therefore candidates\n"
            + " 5 & 7 that are in the highlighted cells can be excluded.\n";
      }
    } else if (i == 2) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Hidden single:\n \n" + " Very frequently, there is only one candidate for a given row, column\n"
            + " or box, but it is hidden among other candidates.\n \n" + " [image]hidden_single.png\n \n"
            + " In the example above, the candidate 6 is only found in the middle right\n"
            + " cell of the 3x3 box. Since every box must have a 6, this cell must be\n" + " that 6.\n \n" + " [b]Hidden pair:\n \n"
            + " If two cells in a group contain a pair of candidates (hidden amongst\n"
            + " other candidates) that are not found in any other cells in that group,\n"
            + " then other candidates in those two cells can be excluded safely.\n \n" + " [image]hidden_pair.png\n \n"
            + " In the example above, the candidates 1 & 9 are only located in two\n"
            + " highlighted cells of a box, and therefore form a 'hidden' pair. All\n"
            + " candidates except 1 & 9 can safely be excluded from these two cells as\n"
            + " one cell must be the 1 while the other must be the 9.\n \n" + " [b]Hidden triple:\n \n"
            + " If three candidates are restricted to three cells in a given group,\n"
            + " then all other candidates in those three cells can be excluded.\n \n" + " [image]hidden_triple.png\n \n"
            + " In the example above, the candidates 3, 6 and 7 are found only in column\n"
            + " four, six and seven. Therefore, all other candidates can be excluded from\n" + " those three cells.\n \n"
            + " Hidden triples are generally extremely hard to spot but fortunately\n" + " they're rarely required to solve a puzzle.\n \n"
            + " [b]Hidden quad:\n \n" + " If four candidates are restricted to four cells in a given group, then\n"
            + " all other candidates in those four cells can be excluded.\n \n" + " [image]hidden_quad.png\n \n"
            + " Hidden Quads are very rare, which is fortunate since they're almost\n"
            + " impossible to spot even when you know they're there.\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Hidden single:\n \n" + " Very frequently, there is only one candidate for a given row, column\n"
            + " or box, but it is hidden among other candidates.\n \n" + " [image]hidden_single.png\n \n"
            + " In the example above, the candidate 6 is only found in the middle right\n"
            + " cell of the 3x3 box. Since every box must have a 6, this cell must be\n" + " that 6.\n \n" + " [b]Hidden pair:\n \n"
            + " If two cells in a group contain a pair of candidates (hidden amongst\n"
            + " other candidates) that are not found in any other cells in that group,\n"
            + " then other candidates in those two cells can be excluded safely.\n \n" + " [image]hidden_pair.png\n \n"
            + " In the example above, the candidates 1 & 9 are only located in two\n"
            + " highlighted cells of a box, and therefore form a 'hidden' pair. All\n"
            + " candidates except 1 & 9 can safely be excluded from these two cells as\n"
            + " one cell must be the 1 while the other must be the 9.\n \n" + " [b]Hidden triple:\n \n"
            + " If three candidates are restricted to three cells in a given group,\n"
            + " then all other candidates in those three cells can be excluded.\n \n" + " [image]hidden_triple.png\n \n"
            + " In the example above, the candidates 3, 6 and 7 are found only in column\n"
            + " four, six and seven. Therefore, all other candidates can be excluded from\n" + " those three cells.\n \n"
            + " Hidden triples are generally extremely hard to spot but fortunately\n" + " they're rarely required to solve a puzzle.\n \n"
            + " [b]Hidden quad:\n \n" + " If four candidates are restricted to four cells in a given group, then\n"
            + " all other candidates in those four cells can be excluded.\n \n" + " [image]hidden_quad.png\n \n"
            + " Hidden Quads are very rare, which is fortunate since they're almost\n"
            + " impossible to spot even when you know they're there.\n";
      }
    } else if (i == 3) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Locked Candidates 1:\n \n" + " Sometimes a candidate within a box is restricted to one row or column.\n"
            + " Since one of these cells must contain that specific candidate, the\n"
            + " candidate can safely be excluded from the remaining cells in that row\n" + " or column outside of the box.\n \n"
            + " [image]locked1.png\n \n" + " In the example above, the right box only has candidate 2's in its bottom\n"
            + " row. Since, one of those cells must be a 2, no cells in that row outside\n"
            + " that box can be a 2. Therefore 2 can be excluded as a candidate from the\n" + " highlighted cells.\n \n"
            + " [b]Locked Candidates 2:\n \n" + " Sometimes a candidate within a row or column is restricted to one box.\n"
            + " Since one of these cells must contain that specific candidate, the\n"
            + " candidate can safely be excluded from the remaining cells in the box.\n \n" + " [image]locked2.png\n \n"
            + " In the example above, the left column has candidate 9's only in the\n"
            + " middle box. Therefore, since one of these cells must be a 9 (otherwise\n"
            + " the column would be without a 9), 9's can safely be excluded from all\n"
            + " cells in this middle box except those in the left column.\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Locked Candidates 1:\n \n" + " Sometimes a candidate within a box is restricted to one row or column.\n"
            + " Since one of these cells must contain that specific candidate, the\n"
            + " candidate can safely be excluded from the remaining cells in that row\n" + " or column outside of the box.\n \n"
            + " [image]locked1.png\n \n" + " In the example above, the right box only has candidate 2's in its bottom\n"
            + " row. Since, one of those cells must be a 2, no cells in that row outside\n"
            + " that box can be a 2. Therefore 2 can be excluded as a candidate from the\n" + " highlighted cells.\n \n"
            + " [b]Locked Candidates 2:\n \n" + " Sometimes a candidate within a row or column is restricted to one box.\n"
            + " Since one of these cells must contain that specific candidate, the\n"
            + " candidate can safely be excluded from the remaining cells in the box.\n \n" + " [image]locked2.png\n \n"
            + " In the example above, the left column has candidate 9's only in the\n"
            + " middle box. Therefore, since one of these cells must be a 9 (otherwise\n"
            + " the column would be without a 9), 9's can safely be excluded from all\n"
            + " cells in this middle box except those in the left column.\n";
      }
    } else if (i == 4) {
      if (config.getLanguage().equals("est")) {
        message = " [b]X-Wing:\n \n" + " For every Sudoku, a value can exist only once in each row, column and\n"
            + " box. If a value has only 2 possible locations in a given row (ie it has\n"
            + " a candidate in only 2 cells in that row), then it must be assigned to one\n"
            + " of these 2 cells. Given a particular puzzle that has two rows where a given\n"
            + " candidate 'C' is restricted to exactly the same two columns (and no more\n" + " than 2 columns), and since\n"
            + "    1) candidate C must be assigned once in each of these two rows, and\n"
            + "    2) no column can contain more than one of candidate C\n"
            + " then candidate C must be assigned exactly once in each of these two\n"
            + " columns within these two rows. Therefore, it's not possible for any\n"
            + " other cells in these two columns to contain candidate C. This same logic\n"
            + " applies when a puzzle that has two columns where candidate C is restricted\n" + " to exactly the same two rows.\n \n"
            + " [image]x_wing.png\n \n" + " In the example above filtering has been added so only candidate\n"
            + " 6's are visible. (Cells which contain the filtered candidate are\n"
            + " automatically highlighted pale green in Simple Sudoku unless\n"
            + " subsequently recolored - which is the case for the blue cells this\n" + " example).\n"
            + " The cells marked with a blue highlight form an \"X-Wing\" since rows\n"
            + " one and nine both have only two cells with candidate 6's and these two\n"
            + " cells share the same two columns. Therefore, other candidate 6's in\n"
            + " columns six and nine (highlighted yellow) can safely be removed.\n \n"
            + " (Note: Candidate C must be assigned to either 1) the top-left and\n"
            + " bottom-right corners, or 2) the bottom-left and top-right corners\n"
            + " of the rectangular grid created by these two rows and columns. The\n"
            + " pattern created by these crossed diagonals is the likely origin to\n" + " this technique's name.)\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]X-Wing:\n \n" + " For every Sudoku, a value can exist only once in each row, column and\n"
            + " box. If a value has only 2 possible locations in a given row (ie it has\n"
            + " a candidate in only 2 cells in that row), then it must be assigned to one\n"
            + " of these 2 cells. Given a particular puzzle that has two rows where a given\n"
            + " candidate 'C' is restricted to exactly the same two columns (and no more\n" + " than 2 columns), and since\n"
            + "    1) candidate C must be assigned once in each of these two rows, and\n"
            + "    2) no column can contain more than one of candidate C\n"
            + " then candidate C must be assigned exactly once in each of these two\n"
            + " columns within these two rows. Therefore, it's not possible for any\n"
            + " other cells in these two columns to contain candidate C. This same logic\n"
            + " applies when a puzzle that has two columns where candidate C is restricted\n" + " to exactly the same two rows.\n \n"
            + " [image]x_wing.png\n \n" + " In the example above filtering has been added so only candidate\n"
            + " 6's are visible. (Cells which contain the filtered candidate are\n"
            + " automatically highlighted pale green in Simple Sudoku unless\n"
            + " subsequently recolored - which is the case for the blue cells this\n" + " example).\n"
            + " The cells marked with a blue highlight form an \"X-Wing\" since rows\n"
            + " one and nine both have only two cells with candidate 6's and these two\n"
            + " cells share the same two columns. Therefore, other candidate 6's in\n"
            + " columns six and nine (highlighted yellow) can safely be removed.\n \n"
            + " (Note: Candidate C must be assigned to either 1) the top-left and\n"
            + " bottom-right corners, or 2) the bottom-left and top-right corners\n"
            + " of the rectangular grid created by these two rows and columns. The\n"
            + " pattern created by these crossed diagonals is the likely origin to\n" + " this technique's name.)\n";
      }
    } else if (i == 5) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Swordfish:\n \n" + " The Swordfish pattern is a variation on the \"X-Wing\" pattern.\n \n" + " Formal definition:\n"
            + " Given a particular puzzle that has three rows where a given candidate\n"
            + " 'C' is restricted to the same three columns, and since\n"
            + "    1) candidate C must be assigned once in each of these three rows\n"
            + "    2) no column can contain more than one of candidate C\n"
            + " then candidate C must be assigned exactly once in each of these three\n"
            + " columns within these three rows. Therefore, it's not possible for any\n"
            + " other cells in these three columns to contain candidate C.\n \n"
            + " This same logic applies when a puzzle that has three columns where\n"
            + " candidate C is restricted to exactly the same three rows.\n \n" + " [image]swordfish.png\n \n"
            + " In the example above, filtering has been added so only candidate 5's\n" + " are visible.\n"
            + " Three rows (three, five & seven) have candidate 5 in no more than three\n"
            + " cells (only two cells each in this example), and these cells all share\n"
            + " the same three columns (three, four & seven). A \"Swordfish\" pattern\n"
            + " is established. Other candidate 5's in these three columns (highlighted\n" + " yellow) can be excluded safely.\n \n"
            + " Note: As shown in this example, there does not have to be exactly 3\n"
            + " cells in each row (or column), there may be less. However, there must\n"
            + " not be more that three candidates in the pattern defining rows.\n"
            + " If you're particularly observant, you'll also spot the reciprocal Swordfish\n"
            + " in the example above (which excludes the same candidates). Anyhow, it doesn't\n"
            + " matter which Swordfish you spot first ...\n \n" + " [image]swordfish2.png\n \n" + " [b]Jellyfish:\n \n"
            + " The X-Wing and Swordfish techniques can be further generalised to include\n"
            + " rows containing candidates restricted to four cells in the same four columns.\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Swordfish:\n \n" + " The Swordfish pattern is a variation on the \"X-Wing\" pattern.\n \n" + " Formal definition:\n"
            + " Given a particular puzzle that has three rows where a given candidate\n"
            + " 'C' is restricted to the same three columns, and since\n"
            + "    1) candidate C must be assigned once in each of these three rows\n"
            + "    2) no column can contain more than one of candidate C\n"
            + " then candidate C must be assigned exactly once in each of these three\n"
            + " columns within these three rows. Therefore, it's not possible for any\n"
            + " other cells in these three columns to contain candidate C.\n \n"
            + " This same logic applies when a puzzle that has three columns where\n"
            + " candidate C is restricted to exactly the same three rows.\n \n" + " [image]swordfish.png\n \n"
            + " In the example above, filtering has been added so only candidate 5's\n" + " are visible.\n"
            + " Three rows (three, five & seven) have candidate 5 in no more than three\n"
            + " cells (only two cells each in this example), and these cells all share\n"
            + " the same three columns (three, four & seven). A \"Swordfish\" pattern\n"
            + " is established. Other candidate 5's in these three columns (highlighted\n" + " yellow) can be excluded safely.\n \n"
            + " Note: As shown in this example, there does not have to be exactly 3\n"
            + " cells in each row (or column), there may be less. However, there must\n"
            + " not be more that three candidates in the pattern defining rows.\n"
            + " If you're particularly observant, you'll also spot the reciprocal Swordfish\n"
            + " in the example above (which excludes the same candidates). Anyhow, it doesn't\n"
            + " matter which Swordfish you spot first ...\n \n" + " [image]swordfish2.png\n \n" + " [b]Jellyfish:\n \n"
            + " The X-Wing and Swordfish techniques can be further generalised to include\n"
            + " rows containing candidates restricted to four cells in the same four columns.\n";
      }
    } else if (i == 6) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Colors:\n \n" + " Of interest are individual candidates which are in only two cells in\n"
            + " a given group (a row, column or box). Those two cells have a 'conjugate'\n"
            + " relationship where one must be the value (true) while the other must not\n"
            + " (false). Because we don't yet know which is which, a recognised strategy\n"
            + " is to visualise this relationship using two colors (and I've arbitrarily\n"
            + " chosen blue and green for the following examples). Typically there are a\n"
            + " number of 'conjugate pairs' present at any given time. Sometimes these\n"
            + " conjugate pairs link with other conjugate pairs forming a chain of\n"
            + " alternate true/false cell states, and these chains may expose candidates\n" + " which can be excluded safely. \n \n"
            + " Whenever two cells in a conjugate chain have the same color and also share\n"
            + " the same group, that color must be the 'false' color since each group can\n" + " only have one of any value.\n \n"
            + " [image]colors2.gif\n \n" + " In the example above, filtering has been added so only candidate 9's are\n"
            + " visible. (Cells which contain the filtered candidate are automatically\n"
            + " highlighted pale green in Simple Sudoku unless subsequently recolored - \n"
            + " which is the case for all but one cell in this example). It is easy to\n"
            + " see that there are a number of conjugate relationships allowing alternate\n"
            + " coloring in a chain. Starting with the cell R2C2, which I've arbitrarily\n"
            + " colored green, it has 2 conjugates - cells R6C2 (since there are only 2\n"
            + " candidate 9's in Column 2) and cell R2C3 (since there are only 2 candidate\n"
            + " 9's in row 2) which I've colored blue. Both these 2 blue cells\n"
            + " (R6C2 & R2C3) have other conjugate cells which I've colored green.\n"
            + " Repeating this technique around the grid we soon discover that there are\n"
            + " blue cells sharing the same group. Since any group can only have one of\n"
            + " a given value, the blue cells must represent the false values so all bright\n"
            + " green cells can safely be assigned the value 9.\n \n"
            + " Also, whenever a candidate outside the chain relates by column, row or box\n"
            + " to two alternately colored cells in a conjugate chain, that 'non-chain'\n" + " candidate can be excluded.\n \n"
            + " [image]colors1.gif\n \n" + " In the example above filtering has been applied so only candidate 5's\n"
            + " are visible. The cells labeled A & B form a conjugate pair as they are\n"
            + " the only candidate 5's in column eight. Cells labelled B & C also form\n"
            + " a conjugate pair as they are the only candidate 5's in the bottom right\n"
            + " box. Finally, cells C & D form a conjugate pair as they are the only\n"
            + " candidate 5's in row eight. As these three conjugate pairs all link\n"
            + " together by separate conjugate relationships, they form a chain and can\n"
            + " be colored alternately as shown. The yellow highlighted cell remotely\n"
            + " relates to linked conjugate pairs of alternate colors (cells A & D).\n"
            + " Since one of the two colors (blue & green) represents the true value 5,\n"
            + " this remote candidate can safely be excluded.\n \n" + " [image]colors3.gif\n \n"
            + " In the example above one cell from that group (column 5) must\n"
            + " be 'true' (be the 9), so one of A, B or C must be true. Because\n"
            + " 'green' shares a group with each of A,B & C it can't be the 'true'\n"
            + " colour (because there can't be two 'true's in a group).\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Colors:\n \n" + " Of interest are individual candidates which are in only two cells in\n"
            + " a given group (a row, column or box). Those two cells have a 'conjugate'\n"
            + " relationship where one must be the value (true) while the other must not\n"
            + " (false). Because we don't yet know which is which, a recognised strategy\n"
            + " is to visualise this relationship using two colors (and I've arbitrarily\n"
            + " chosen blue and green for the following examples). Typically there are a\n"
            + " number of 'conjugate pairs' present at any given time. Sometimes these\n"
            + " conjugate pairs link with other conjugate pairs forming a chain of\n"
            + " alternate true/false cell states, and these chains may expose candidates\n" + " which can be excluded safely. \n \n"
            + " Whenever two cells in a conjugate chain have the same color and also share\n"
            + " the same group, that color must be the 'false' color since each group can\n" + " only have one of any value.\n \n"
            + " [image]colors2.gif\n \n" + " In the example above, filtering has been added so only candidate 9's are\n"
            + " visible. (Cells which contain the filtered candidate are automatically\n"
            + " highlighted pale green in Simple Sudoku unless subsequently recolored - \n"
            + " which is the case for all but one cell in this example). It is easy to\n"
            + " see that there are a number of conjugate relationships allowing alternate\n"
            + " coloring in a chain. Starting with the cell R2C2, which I've arbitrarily\n"
            + " colored green, it has 2 conjugates - cells R6C2 (since there are only 2\n"
            + " candidate 9's in Column 2) and cell R2C3 (since there are only 2 candidate\n"
            + " 9's in row 2) which I've colored blue. Both these 2 blue cells\n"
            + " (R6C2 & R2C3) have other conjugate cells which I've colored green.\n"
            + " Repeating this technique around the grid we soon discover that there are\n"
            + " blue cells sharing the same group. Since any group can only have one of\n"
            + " a given value, the blue cells must represent the false values so all bright\n"
            + " green cells can safely be assigned the value 9.\n \n"
            + " Also, whenever a candidate outside the chain relates by column, row or box\n"
            + " to two alternately colored cells in a conjugate chain, that 'non-chain'\n" + " candidate can be excluded.\n \n"
            + " [image]colors1.gif\n \n" + " In the example above filtering has been applied so only candidate 5's\n"
            + " are visible. The cells labeled A & B form a conjugate pair as they are\n"
            + " the only candidate 5's in column eight. Cells labelled B & C also form\n"
            + " a conjugate pair as they are the only candidate 5's in the bottom right\n"
            + " box. Finally, cells C & D form a conjugate pair as they are the only\n"
            + " candidate 5's in row eight. As these three conjugate pairs all link\n"
            + " together by separate conjugate relationships, they form a chain and can\n"
            + " be colored alternately as shown. The yellow highlighted cell remotely\n"
            + " relates to linked conjugate pairs of alternate colors (cells A & D).\n"
            + " Since one of the two colors (blue & green) represents the true value 5,\n"
            + " this remote candidate can safely be excluded.\n \n" + " [image]colors3.gif\n \n"
            + " In the example above one cell from that group (column 5) must\n"
            + " be 'true' (be the 9), so one of A, B or C must be true. Because\n"
            + " 'green' shares a group with each of A,B & C it can't be the 'true'\n"
            + " colour (because there can't be two 'true's in a group).\n";
      }
    } else if (i == 7) {
      if (config.getLanguage().equals("est")) {
        message = " [b]Multi-Colors:\n \n" + " There are 2 types of what I call multi-colors. When filtering on a\n"
            + " specific candidate and finding to 2 seperate conjugate chains (labelled\n"
            + " Blue,Green & Pink,Orange respectively) ...\n \n"
            + " Type 1: If 'Blue' shares a group with 'Pink' and 'Orange' then 'Blue'\n"
            + " must be the false candidate since either 'Pink' or 'Orange' must be true.\n \n" + " Example of Type 1:\n \n"
            + " [image]multicolors1.png\n \n" + " Filtering on 7s and given that Blue & Bright Green are conjugate cells as\n"
            + " are the Pink and Orange cells - then since either Pink or Orange must be\n"
            + " 'true', then the Blue cells must be the 'false' cells since they share a\n"
            + " group with both Pink and Orange. Candidate 7 can be excluded from all Blue\n" + " cells.\n \n"
            + " Type 2: If 'Blue' shares a group with 'Pink' then any cell with the given\n"
            + " candidate and sharing a group with both 'Green' and 'Orange' can have that\n"
            + " candidate excluded. Reason: Since 'Blue' and 'Pink' can't both be true,\n"
            + " then either one or both of 'Green' and 'Orange' must be true. Therefore\n"
            + " any cell sharing a group with both 'Green' and 'Orange' can safely have\n" + " that candidate excluded.\n \n"
            + " Example of Type 2:\n \n" + " [image]multicolors2.png\n"
            + " Filtering on 4s and given that Blue & Bright Green are conjugate cells as\n"
            + " are the Pink and Orange cells - then the Orange and Blue cells can't both\n"
            + " be 'true' cells as they share a group. Therefore one or both of the Pink\n"
            + " and Bright Green cells must be 'true' and, consequently, any cells which\n"
            + " share a group with both Pink and Bright Green cells (ie r7c9) can have\n" + " candidate 4 removed from that cell.\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]Multi-Colors:\n \n" + " There are 2 types of what I call multi-colors. When filtering on a\n"
            + " specific candidate and finding to 2 seperate conjugate chains (labelled\n"
            + " Blue,Green & Pink,Orange respectively) ...\n \n"
            + " Type 1: If 'Blue' shares a group with 'Pink' and 'Orange' then 'Blue'\n"
            + " must be the false candidate since either 'Pink' or 'Orange' must be true.\n \n" + " Example of Type 1:\n \n"
            + " [image]multicolors1.png\n \n" + " Filtering on 7s and given that Blue & Bright Green are conjugate cells as\n"
            + " are the Pink and Orange cells - then since either Pink or Orange must be\n"
            + " 'true', then the Blue cells must be the 'false' cells since they share a\n"
            + " group with both Pink and Orange. Candidate 7 can be excluded from all Blue\n" + " cells.\n \n"
            + " Type 2: If 'Blue' shares a group with 'Pink' then any cell with the given\n"
            + " candidate and sharing a group with both 'Green' and 'Orange' can have that\n"
            + " candidate excluded. Reason: Since 'Blue' and 'Pink' can't both be true,\n"
            + " then either one or both of 'Green' and 'Orange' must be true. Therefore\n"
            + " any cell sharing a group with both 'Green' and 'Orange' can safely have\n" + " that candidate excluded.\n \n"
            + " Example of Type 2:\n \n" + " [image]multicolors2.png\n"
            + " Filtering on 4s and given that Blue & Bright Green are conjugate cells as\n"
            + " are the Pink and Orange cells - then the Orange and Blue cells can't both\n"
            + " be 'true' cells as they share a group. Therefore one or both of the Pink\n"
            + " and Bright Green cells must be 'true' and, consequently, any cells which\n"
            + " share a group with both Pink and Bright Green cells (ie r7c9) can have\n" + " candidate 4 removed from that cell.\n";
      }
    } else if (i == 8) {
      if (config.getLanguage().equals("est")) {
        message = " [b]XY-Wing:\n \n" + " Formal definition: \n" + " Given 3 cells where -\n"
            + "     1) all cells have exactly 2 candidates\n" + "     2) they share the same 3 candidates in the form - xy, yz, xz\n"
            + "     3) one cell (the Y 'stem' with canidates xy) shares a group with\n"
            + "        the other 2 cells (Y 'branches' with candidates xz & yz)\n"
            + " then any other cell which shares a group with both 'branch' cells can\n"
            + " have excluded the 'z' candidate that is common to these 'branch' cells.\n \n"
            + " Proof: If a cell sharing a group with both branch cells is assigned the\n"
            + " 'z' candidate, then neither branch can be assigned the 'z' candidate.\n"
            + " Consequently, one branch would be the 'x' and the other the 'y' leaving\n"
            + " the 'stem' without a candidate, an invalid state.\n \n"
            + " Note: If all 3 cells in a xy-wing pattern shared the same group, then\n" + " they would be called a 'naked triple'.\n \n"
            + " Example:\n \n" + " [image]xy_wing.png\n \n" + " (A) is the 'stem' cell, and (B) & (C) are the 'branch'\n"
            + " cells with candidate '5' common to both branches. Therefore, any cells\n"
            + " which share a group with both these branches can safely have candidate\n"
            + " 5 excluded (ie cells R1C6 & R9C5 as illustrated).\n";
      } else if (config.getLanguage().equals("eng")) {
        message = " [b]XY-Wing:\n \n" + " Formal definition: \n" + " Given 3 cells where -\n"
            + "     1) all cells have exactly 2 candidates\n" + "     2) they share the same 3 candidates in the form - xy, yz, xz\n"
            + "     3) one cell (the Y 'stem' with canidates xy) shares a group with\n"
            + "        the other 2 cells (Y 'branches' with candidates xz & yz)\n"
            + " then any other cell which shares a group with both 'branch' cells can\n"
            + " have excluded the 'z' candidate that is common to these 'branch' cells.\n \n"
            + " Proof: If a cell sharing a group with both branch cells is assigned the\n"
            + " 'z' candidate, then neither branch can be assigned the 'z' candidate.\n"
            + " Consequently, one branch would be the 'x' and the other the 'y' leaving\n"
            + " the 'stem' without a candidate, an invalid state.\n \n"
            + " Note: If all 3 cells in a xy-wing pattern shared the same group, then\n" + " they would be called a 'naked triple'.\n \n"
            + " Example:\n \n" + " [image]xy_wing.png\n \n" + " (A) is the 'stem' cell, and (B) & (C) are the 'branch'\n"
            + " cells with candidate '5' common to both branches. Therefore, any cells\n"
            + " which share a group with both these branches can safely have candidate\n"
            + " 5 excluded (ie cells R1C6 & R9C5 as illustrated).\n";
      }
    }
    return message;
  }

  public String getHistory_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ajalugu";
    } else if (config.getLanguage().equals("eng")) {
      message = "History";
    }
    return message;
  }

  public String getMain_error() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Programmi alustamiseks käivita R-Sudoku.jar";
    } else if (config.getLanguage().equals("eng")) {
      message = "To start program execute R-Sudoku.jar";
    }
    return message;
  }

  public String getMain_version3() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Programmi uuendamiseks tõmmata fail\n" + " http://www.hot.ee/rometpiho/sudoku/R-Sudoku.jar\n";
    } else if (config.getLanguage().equals("eng")) {
      message = " For updating program download\n" + " http://www.hot.ee/rometpiho/sudoku/R-Sudoku.jar\n";
    }
    return message;
  }

  public String getMessage() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Teade";
    } else if (config.getLanguage().equals("eng")) {
      message = "Message";
    }
    return message;
  }

  public String getModel_genereeri() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Uue mängu genereerimine";
    } else if (config.getLanguage().equals("eng")) {
      message = "Generating new game";
    }
    return message;
  }

  public String getModel_hinterror() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Oled juba teinud mingi vea. Mängul ei ole enam ühtegi lahendit";
    } else if (config.getLanguage().equals("eng")) {
      message = "You have already made a mistake. The game has no solutions.";
    }
    return message;
  }

  public String getModifyUsers_cbutt() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Valiku nupud";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choice buttons";
    }
    return message;
  }

  public String getModifyUsers_etext() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Algseisu tekst";
    } else if (config.getLanguage().equals("eng")) {
      message = "Base text";
    }
    return message;
  }

  public String getModifyUsers_expl() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Värvide näited";
    } else if (config.getLanguage().equals("eng")) {
      message = "Color examples";
    }
    return message;
  }

  public String getModifyUsers_hbutt() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Abinupud";
    } else if (config.getLanguage().equals("eng")) {
      message = "Helpbuttons";
    }
    return message;
  }

  public String getModifyUsers_htext() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Abinupu tekst";
    } else if (config.getLanguage().equals("eng")) {
      message = "Helpbutton text";
    }
    return message;
  }

  public String getModifyUsers_ltext() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Lahenduse tekst";
    } else if (config.getLanguage().equals("eng")) {
      message = "Solution text";
    }
    return message;
  }

  public String getModifyUsers_name() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Nimi: ";
    } else if (config.getLanguage().equals("eng")) {
      message = "Name: ";
    }
    return message;
  }

  public String getModifyUsers_ok() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Seadista";
    } else if (config.getLanguage().equals("eng")) {
      message = "OK";
    }
    return message;
  }

  public String getModifyUsers_sbutt() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Sudoku nupud";
    } else if (config.getLanguage().equals("eng")) {
      message = "Sudoku buttons";
    }
    return message;
  }

  public String getModifyUsers_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Kasutaja seadistamine";
    } else if (config.getLanguage().equals("eng")) {
      message = "User settings";
    }
    return message;
  }

  public String getPrintPreview_message(String nimi) {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Loodi fail nimega " + nimi + ".html\n" + " Printimiseks avada see fail ja oma brauseri menüüst valida print.";
    } else if (config.getLanguage().equals("eng")) {
      message = " Created file named " + nimi + ".html\n" + " For printing open it and from your browser menu choose print.";
    }
    return message;
  }

  public String getSudoku_abi() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Abi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Help";
    }
    return message;
  }

  public String getSudoku_abi_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Abi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Help";
    }
    return message;
  }

  public String getSudoku_about() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Sudokust";
    } else if (config.getLanguage().equals("eng")) {
      message = "About";
    }
    return message;
  }

  public String getSudoku_ajal() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ajalugu";
    } else if (config.getLanguage().equals("eng")) {
      message = "History";
    }
    return message;
  }

  public String getSudoku_ajalugu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ajalugu";
    } else if (config.getLanguage().equals("eng")) {
      message = "History";
    }
    return message;
  }

  public String getSudoku_alusta_button() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Start";
    } else if (config.getLanguage().equals("eng")) {
      message = "Start";
    }
    return message;
  }

  public String getSudoku_ava_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ava";
    } else if (config.getLanguage().equals("eng")) {
      message = "Open";
    }
    return message;
  }

  public String getsudoku_background() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Värvib kõik kastid valgeks või \nvaliku akna olemasoleku puhul kustutab kastist numbri";
    } else if (config.getLanguage().equals("eng")) {
      message = "Makes all boxes white or \nif choice window is open removes that number";
    }
    return message;
  }

  public String getSudoku_diffeasy() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Kerge";
    } else if (config.getLanguage().equals("eng")) {
      message = " Easy";
    }
    return message;
  }

  public String getSudoku_diffexpert() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Meister";
    } else if (config.getLanguage().equals("eng")) {
      message = " Expert";
    }
    return message;
  }

  public String getSudoku_diffextreme() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Üliraske";
    } else if (config.getLanguage().equals("eng")) {
      message = " Extreme";
    }
    return message;
  }

  public String getSudoku_diffmedium() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Keskmine";
    } else if (config.getLanguage().equals("eng")) {
      message = " Medium";
    }
    return message;
  }

  public String getSudoku_diffhard() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Raske";
    } else if (config.getLanguage().equals("eng")) {
      message = " Hard";
    }
    return message;
  }

  public String getSudoku_edit() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Redigeeri";
    } else if (config.getLanguage().equals("eng")) {
      message = "Edit";
    }
    return message;
  }

  public String getSudoku_eesti() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Eesti";
    } else if (config.getLanguage().equals("eng")) {
      message = "Estonian";
    }
    return message;
  }

  public String getSudoku_fonts_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Teksti suurused";
    } else if (config.getLanguage().equals("eng")) {
      message = "Font sizes";
    }
    return message;
  }

  public String getSudoku_genereeri() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Genereeri uus mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Generate new game";
    }
    return message;
  }

  public String getSudoku_inglise() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Inglise";
    } else if (config.getLanguage().equals("eng")) {
      message = "English";
    }
    return message;
  }

  public String getSudoku_kasutaja() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Kasutaja";
    } else if (config.getLanguage().equals("eng")) {
      message = "User";
    }
    return message;
  }

  public String getSudoku_kasutaja_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Profiili muutmine";
    } else if (config.getLanguage().equals("eng")) {
      message = "Modify User";
    }
    return message;
  }

  public String getSudoku_keel() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Keel";
    } else if (config.getLanguage().equals("eng")) {
      message = "Language";
    }
    return message;
  }

  public String getSudoku_lahenda_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Lahenda mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Solve game";
    }
    return message;
  }

  public String getSudoku_lahenda_yks_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Järgmine vihje";
    } else if (config.getLanguage().equals("eng")) {
      message = "Next tip";
    }
    return message;
  }

  public String getSudoku_lisa_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Lisa andmebaasi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Add to database";
    }
    return message;
  }

  public String getSudoku_m2ng() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Fail";
    } else if (config.getLanguage().equals("eng")) {
      message = "File";
    }
    return message;
  }

  public String getSudoku_m2ngud() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Mängud";
    } else if (config.getLanguage().equals("eng")) {
      message = "Games";
    }
    return message;
  }

  public String getSudoku_paus_button() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Paus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Pause";
    }
    return message;
  }

  public String getSudoku_paus_label() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Paus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Pause";
    }
    return message;
  }

  public String getSudoku_print_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Prindi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Print";
    }
    return message;
  }

  public String getSudoku_redo() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Edasi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Redo";
    }
    return message;
  }

  public String getSudoku_ruudustik16() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "16x16 ruudustik";
    } else if (config.getLanguage().equals("eng")) {
      message = "16x16 grid";
    }
    return message;
  }

  public String getSudoku_ruudustik9() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "9x9 ruudustik";
    } else if (config.getLanguage().equals("eng")) {
      message = "9x9 grid";
    }
    return message;
  }

  public String getSudoku_salvesta_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Salvesta";
    } else if (config.getLanguage().equals("eng")) {
      message = "Save";
    }
    return message;
  }

  public String getSudoku_seaded() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Seaded";
    } else if (config.getLanguage().equals("eng")) {
      message = "Options";
    }
    return message;
  }

  public String getSudoku_computerhelp() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Arvuti abi seaded";
    } else if (config.getLanguage().equals("eng")) {
      message = "Computer help preferences";
    }
    return message;
  }

  public String getSudoku_statusnomorehints() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Ei leitud rohkem loogikaid";
    } else if (config.getLanguage().equals("eng")) {
      message = "No logics found";
    }
    return message;
  }

  public String getSudoku_statusgreen() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Roheline värvija";
    } else if (config.getLanguage().equals("eng")) {
      message = "Green colorer";
    }
    return message;
  }

  public String getSudoku_statusorange() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Oranž värvija";
    } else if (config.getLanguage().equals("eng")) {
      message = "Orange colorer";
    }
    return message;
  }

  public String getSudoku_statuscyan() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Sinine värvija";
    } else if (config.getLanguage().equals("eng")) {
      message = "Blue colorer";
    }
    return message;
  }

  public String getSudoku_statuspink() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Roosa värvija";
    } else if (config.getLanguage().equals("eng")) {
      message = "Pink colorer";
    }
    return message;
  }

  public String getSudoku_symm() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Sümmeetrilisus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Symmetry";
    }
    return message;
  }

  public String getSudoku_undo() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Tagasi";
    } else if (config.getLanguage().equals("eng")) {
      message = "Undo";
    }
    return message;
  }

  public String getSudoku_view() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vaade";
    } else if (config.getLanguage().equals("eng")) {
      message = "View";
    }
    return message;
  }

  public String getSymmetry_error() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vähemalt üks valik peab olema valitud!!!";
    } else if (config.getLanguage().equals("eng")) {
      message = "At least one choice must be selected!!!";
    }
    return message;
  }

  public String getSymmetry_symma() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Asümmeetriline";
    } else if (config.getLanguage().equals("eng")) {
      message = "Asymmetryc";
    }
    return message;
  }

  public String getSymmetry_symm90() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "90° pööre";
    } else if (config.getLanguage().equals("eng")) {
      message = "90° rotation";
    }
    return message;
  }

  public String getSymmetry_symm180() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "180° pööre";
    } else if (config.getLanguage().equals("eng")) {
      message = "180° rotation";
    }
    return message;
  }

  public String getSymmetry_symm270() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "270° pööre";
    } else if (config.getLanguage().equals("eng")) {
      message = "270° rotation";
    }
    return message;
  }

  public String getSymmetry_symmvert() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vertikaalne peegeldus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Vertical reflection";
    }
    return message;
  }

  public String getSymmetry_symmdiaga() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Kõrvaldiagonaalne peegeldus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Anti-diagonal reflection";
    }
    return message;
  }

  public String getSymmetry_symmhor() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Horisotaalne peegeldus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Horizontal reflection";
    }
    return message;
  }

  public String getSymmetry_symmdiagm() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Peadiagonaalne peegeldus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Main diagonal reflection";
    }
    return message;
  }

  public String getSudoku_updater() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Uuenda";
    } else if (config.getLanguage().equals("eng")) {
      message = "Update";
    }
    return message;
  }

  public String getSudoku_uuesti_button() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Uuesti";
    } else if (config.getLanguage().equals("eng")) {
      message = "Again";
    }
    return message;
  }

  public String getSudoku_uus_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Uus mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "New game";
    }
    return message;
  }

  public String getSudoku_v2lju_menu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Välju";
    } else if (config.getLanguage().equals("eng")) {
      message = "Exit";
    }
    return message;
  }

  public String getSudoku_vali_menu9() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vali 9x9 mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choose 9x9 game";
    }
    return message;
  }

  public String getSudoku_vali_menu16() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vali 16x16 mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choose 16x16 game";
    }
    return message;
  }

  public String getStatus_vigane() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "VIGANE MÄNG!!! Paranda vead.";
    } else if (config.getLanguage().equals("eng")) {
      message = "INCORRECT SOLUTION!!! Fix errors.";
    }
    return message;
  }

  public String getStatus_veel(boolean alustatud, int tyhi, int t2is) {
    String message = "";
    if (alustatud) {
      if (config.getLanguage().equals("est")) {
        StringBuffer s = new StringBuffer();
        s.append(t2is);
        s.append(" kasti täidetud, ");
        s.append(tyhi);
        s.append(" veel täita.");
        message = s.toString();
      } else if (config.getLanguage().equals("eng")) {
        StringBuffer s = new StringBuffer();
        s.append(t2is);
        s.append(" cells completed, ");
        s.append(tyhi);
        s.append(" cells to go.");
        message = s.toString();
      }
    } else {
      if (config.getLanguage().equals("est")) {
        StringBuffer s = new StringBuffer();
        s.append("ALGSEISU SEADISTAMINE: ");
        s.append(t2is);
        s.append(" kasti täidetud.");
        message = s.toString();
      } else if (config.getLanguage().equals("eng")) {
        StringBuffer s = new StringBuffer();
        s.append("DESIGNING BASE: ");
        s.append(t2is);
        s.append(" cells entered.");
        message = s.toString();
      }
    }
    return message;
  }

  public String getStatus_alusta() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Alustati mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Game started";
    }
    return message;
  }

  public String getStatus_lahendamatu() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Lahendumatu mäng";
    } else if (config.getLanguage().equals("eng")) {
      message = "Unsolvable game";
    }
    return message;
  }

  public String getStatus_uuesti() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Uuesti algseisu";
    } else if (config.getLanguage().equals("eng")) {
      message = "Restart";
    }
    return message;
  }

  public String getUpdater_download() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Tõmmatakse vajalikke faile...\n Palun oota!";
    } else if (config.getLanguage().equals("eng")) {
      message = " Downloading necessary files...\n Please wait!";
    }
    return message;
  }

  public String getUpdater_error() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Vajalikke faile ei leitud!\n" + " Probleemidest teavitada sellest: rometpiho@hot.ee";
    } else if (config.getLanguage().equals("eng")) {
      message = " Necessary files not found!\n" + " Report problems to rometpiho@hot.ee";
    }
    return message;
  }

  public String getUpdater_file() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "uuenda.cmd";
    } else if (config.getLanguage().equals("eng")) {
      message = "update.cmd";
    }
    return message;
  }

  public String getUpdater_message1() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Programmist on olemas uus versioon.\n" + " Kas soovid uuendada?\n";
    } else if (config.getLanguage().equals("eng")) {
      message = " A new version has been launched.\n" + " Would you like to update?\n";
    }
    return message;
  }

  public String getUpdater_message2() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Programmi pole vaja uuendada.";
    } else if (config.getLanguage().equals("eng")) {
      message = " The program is up to date. No update is required.";
    }
    return message;
  }

  public String getUpdater_wait() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = " Uuendatakse... Palun oota!\n";
    } else if (config.getLanguage().equals("eng")) {
      message = " Updating... Please wait!\n";
    }
    return message;
  }

  public String getUsers_change() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Muuda";
    } else if (config.getLanguage().equals("eng")) {
      message = "Edit";
    }
    return message;
  }

  public String getUsers_delete() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Kustuta";
    } else if (config.getLanguage().equals("eng")) {
      message = "Delete";
    }
    return message;
  }

  public String getUsers_new() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Lisa uus";
    } else if (config.getLanguage().equals("eng")) {
      message = "Add new";
    }
    return message;
  }

  public String getUsers_select() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vali";
    } else if (config.getLanguage().equals("eng")) {
      message = "Select";
    }
    return message;
  }

  public String getUsers_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Vali Kasutaja";
    } else if (config.getLanguage().equals("eng")) {
      message = "Choose User";
    }
    return message;
  }

  public String getWin_message() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "                                VÕIT\n\n" + "           Kas soovid alustada uut mängu?";
    } else if (config.getLanguage().equals("eng")) {
      message = "                                YOU WIN\n\n" + "        Would you like to start a new game?";
    }
    return message;
  }

  public String getWin_title() {
    String message = "";
    if (config.getLanguage().equals("est")) {
      message = "Võit";
    } else if (config.getLanguage().equals("eng")) {
      message = "Winner";
    }
    return message;
  }
}
